home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1996-03-01 | 3.5 KB | 96 lines | [TEXT/3PRM] |
- implementation module structure;
-
- import mac_types;
-
- :: Structure :== (!Handle,!Ptr);
-
- DereferenceHandle :: !Handle !Toolbox -> (!Ptr,!Toolbox);
- DereferenceHandle h tb = (DereferenceHandle1 h,tb);
-
- DereferenceHandle1 :: !Handle -> Ptr;
- DereferenceHandle1 h = code (h=U)(pointer=A0){
- instruction 0x83180000 | lwz r24,0(r24)
- };
-
- HandleToStructure :: !Handle -> Structure;
- HandleToStructure h = code (h=D0)(new_h=A0,pointer=A0){
- instruction 0x7F19C378 | mr r25,r24
- instruction 0x83180000 | lwz r24,0(r24)
- };
-
- Append_long :: !Structure !Int !Toolbox -> (!Structure,!Toolbox);
- Append_long hp l tb = (AppendLong hp l,tb);
-
- AppendLong :: !Structure !Int -> Structure;
- AppendLong (h,p) l = code (h=U,p=U,l=U)(new_h=A0,new_p=A0){
- instruction 0x93190000 | stw r24,0(r25)
- instruction 0x3B190004 | addi r24,r25,4
- instruction 0x7F59D378 | mr r25,r26
- };
-
- Append_word :: !Structure !Int !Toolbox -> (!Structure,!Toolbox);
- Append_word hp w tb = (AppendWord hp w,tb);
-
- AppendWord :: !Structure !Int -> Structure;
- AppendWord (h,p) w = code (h=U,p=U,w=U) (new_h=A0,new_p=A0){
- instruction 0xB3190000 | sth r24,0(r25)
- instruction 0x3B190002 | addi r24,r25,2
- instruction 0x7F59D378 | mr r25,r26
- };
-
- Append_byte :: !Structure !Int !Toolbox -> (!Structure,!Toolbox);
- Append_byte hp b tb = (AppendByte hp b,tb);
-
- AppendByte :: !Structure !Int -> Structure;
- AppendByte (h,p) b = code (h=U,p=U,b=U)(new_h=A0,new_p=A0){
- instruction 0x9B190000 | stb r24,0(r25)
- instruction 0x3B190001 | addi r24,r25,1
- instruction 0x7F59D378 | mr r25,r26
- };
-
- Append_zero_and_rect :: !Structure !Rect !Toolbox -> (!Structure,!Toolbox);
- Append_zero_and_rect hp rect tb = (Append_zero_and_rect1 hp rect,tb);
-
- Append_zero_and_rect1 :: !Structure !Rect -> Structure;
- Append_zero_and_rect1 (h,p) (left,top,right,bottom) = code (h=U,p=U,left=U,top=U,right=U,bottom=U)(new_h=A0,new_p=A0){
- instruction 0x38600000 | li r3,0
- instruction 0x907C0000 | stw r3,0(r28)
- instruction 0xB35C0004 | sth r26,4(r28)
- instruction 0xB37C0006 | sth r27,6(r28)
- instruction 0xB31C0008 | sth r24,8(r28)
- instruction 0xB33C000A | sth r25,10(r28)
- instruction 0x3B1C000C | addi r24,r28,12
- instruction 0x7FB9EB78 | mr r25,r29
- };
-
- Append_string_and_align :: !Structure !{#Char} !Toolbox -> (!Structure,!Toolbox);
- Append_string_and_align hp string tb = (Append_string_and_align1 hp string,tb);
-
- Append_string_and_align1 :: !Structure !{#Char} -> Structure;
- Append_string_and_align1 (h,p) string = code (h=U,p=U,string=U)(new_h=A0,new_p=A0){
- instruction 0x8F570007 | lbzu r26,7(r23)
- instruction 0x9B580000 | stb r26,0(r24)
- instruction 0x4800000C | b l2
- instruction 0x8C770001 | l1: lbzu r3,1(r23)
- instruction 0x9C780001 | stbu r3,1(r24)
- instruction 0x375AFFFF | l2: subic. r26,r26,1
- instruction 0x4080FFF4 | bge l1
- instruction 0x3B180002 | addi r24,r24,2
- instruction 0x5718003C | clrrwi r24,r24,1
- };
-
- Append_string :: !Structure !{#Char} !Toolbox -> (!Structure,!Toolbox);
- Append_string hp string tb = (AppendString hp string,tb);
-
- AppendString :: !Structure !{#Char} -> Structure;
- AppendString (h,p) string = code (h=U,p=U,string=U)(new_h=A0,new_p=A0){
- instruction 0x8F570007 | lbzu r26,7(r23)
- instruction 0x3B18FFFF | addi r24,r24,-1
- instruction 0x4800000C | b l2
- instruction 0x8C770001 | l1: lbzu r3,1(r23)
- instruction 0x9C780001 | stbu r3,1(r24)
- instruction 0x375AFFFF | l2: subic. r26,r26,1
- instruction 0x4080FFF4 | bge l1
- instruction 0x3B180001 | addi r24,r24,1
- };
-